package br.com.ucb.invista.controller;

import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.ucb.invista.dao.LancamentoDao;
import br.com.ucb.invista.domain.Lancamento;
import br.com.ucb.invista.enumeration.TipoFormaLancamento;
import br.com.ucb.invista.enumeration.TipoFrequenciaLancamento;
import br.com.ucb.invista.enumeration.TipoLancamento;
import br.com.ucb.invista.enumeration.TipoSituacao;
import br.com.ucb.invista.utils.Constantes;

@ManagedBean(name = "lancamentoController")
@SessionScoped
public class LancamentoController implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private LancamentoDao ilancamentoDao;
	private Lancamento lancamento;
	
	public LancamentoController() {
		ilancamentoDao = new LancamentoDao();
		lancamento = new Lancamento();
	}
	
	public String novo() {
		this.limparCampos();
		return Constantes.paginaLancamentoCadastrarAlterar;
	}
	
	public String cancelar() {
		this.limparCampos();
		return Constantes.paginaLancamentoListar;
	}
	
	public void limparCampos() {
		this.lancamento = new Lancamento();
		this.ilancamentoDao = new LancamentoDao();
	}
	
	public String salvar() {
		ilancamentoDao.salvar(lancamento);
			this.limparCampos();
					return Constantes.paginaLancamentoCadastrarAlterar;
	}
	
	public String alterar(Lancamento lancamento) {  
		this.lancamento = lancamento;
		ilancamentoDao.alterar(lancamento);
		return Constantes.paginaLancamentoCadastrarAlterar;
	}
	
	public String excluir(Lancamento lancamentoParametro) {
		ilancamentoDao.excluir(lancamentoParametro);
		this.limparCampos();
		return "listarLancamento?redirect=true";
	}
	
	public List<TipoLancamento> listarTipoLancamento() {
		return Arrays.asList(TipoLancamento.values());
	}
	
	public List<TipoFormaLancamento> listarTipoFormaLancamento() {
		return Arrays.asList(TipoFormaLancamento.values());	
	}
	
	public List<TipoSituacao> listarTipoSituacao() {
		return Arrays.asList(TipoSituacao.values());	
	}
	
	public List<TipoFrequenciaLancamento> listarTipoFrequencia() {
		return Arrays.asList(TipoFrequenciaLancamento.values());	
	}
	
	public String abrirPaginaLancamentoCadastrar() {
		return Constantes.paginaLancamentoCadastrarAlterar;
	}
	
	public String abrirPaginaLancamentoListar() {
		return Constantes.paginaLancamentoListar;
	}
	
	public String abrirPaginaLancamentoAlterar() {
		return Constantes.paginaLancamentoCadastrarAlterar;
	}
	
	public LancamentoDao getLancamentoDao() {
		return ilancamentoDao;
	}

	public void setLancamentoDao(
			LancamentoDao ilancamentoDao) {
		this.ilancamentoDao = ilancamentoDao;
	}

	public Lancamento getLancamento() {
		return lancamento;
	}

	public void setLancamento(Lancamento lancamento) {
		this.lancamento = lancamento;
	}
}
